// 导入Vue核心库
import Vue from 'vue'

// 导入cookie操作工具
import Cookies from 'js-cookie'

// 导入Element UI组件库及自定义样式
import Element from 'element-ui'
import './assets/styles/element-variables.scss' // Element UI自定义变量样式

// 导入全局样式
import '@/assets/styles/index.scss' // 全局基础样式
import '@/assets/styles/ruoyi.scss' // 若依项目专用样式

// 导入根组件、状态管理、路由等核心模块
import App from './App'
import store from './store'
import router from './router'

// 导入自定义指令和插件
import directive from './directive' // 自定义指令集合
import plugins from './plugins' // 自定义插件集合

// 导入请求工具函数（文件下载）
import { download } from '@/utils/request'

// 导入图标资源（svg图标）
import './assets/icons' // 图标注册

// 导入权限控制模块（自动应用路由守卫）
import './permission' // 权限控制逻辑

// 导入系统字典和配置接口
import { getDicts } from "@/api/system/dict/data" // 字典数据接口
import { getConfigKey } from "@/api/system/config" // 系统配置接口

// 导入若依工具函数
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi"

// 导入自定义组件
import Pagination from "@/components/Pagination" // 分页组件
import RightToolbar from "@/components/RightToolbar" // 右侧工具栏组件
import Editor from "@/components/Editor" // 富文本编辑器组件
import FileUpload from "@/components/FileUpload" // 文件上传组件
import ImageUpload from "@/components/ImageUpload" // 图片上传组件
import ImagePreview from "@/components/ImagePreview" // 图片预览组件
import DictTag from '@/components/DictTag' // 字典标签组件
import DictData from '@/components/DictData' // 字典数据组件

// 全局方法挂载（Vue实例可用）
Vue.prototype.getDicts = getDicts // 获取字典数据方法
Vue.prototype.getConfigKey = getConfigKey // 获取系统配置方法
Vue.prototype.parseTime = parseTime // 时间格式化方法
Vue.prototype.resetForm = resetForm // 重置表单方法
Vue.prototype.addDateRange = addDateRange // 日期范围处理方法
Vue.prototype.selectDictLabel = selectDictLabel // 字典标签转换方法（单标签）
Vue.prototype.selectDictLabels = selectDictLabels // 字典标签转换方法（多标签）
Vue.prototype.download = download // 文件下载方法
Vue.prototype.handleTree = handleTree // 树结构处理方法

// 全局组件注册（所有Vue实例可直接使用）
Vue.component('DictTag', DictTag) // 字典标签组件
Vue.component('Pagination', Pagination) // 分页组件
Vue.component('RightToolbar', RightToolbar) // 右侧工具栏组件
Vue.component('Editor', Editor) // 富文本编辑器组件
Vue.component('FileUpload', FileUpload) // 文件上传组件
Vue.component('ImageUpload', ImageUpload) // 图片上传组件
Vue.component('ImagePreview', ImagePreview) // 图片预览组件

// 注册自定义指令和插件
Vue.use(directive) // 注册自定义指令
Vue.use(plugins) // 注册自定义插件
DictData.install() // 字典数据组件安装

/**
 * 关于Mock说明：
 * 若不需要使用mock服务（模拟接口数据），可以调用mockXHR()启用MockJs
 * 注意：生产环境应移除MockJs配置！
 */

// 配置Element UI默认尺寸（从cookie获取或使用medium默认值）
Vue.use(Element, {
  size: Cookies.get('size') || 'medium'
})

// 关闭生产环境提示（避免控制台警告）
Vue.config.productionTip = false

// 创建Vue根实例并挂载到#app元素
new Vue({
  el: '#app',
  router, // 注入路由
  store, // 注入状态管理
  render: h => h(App) // 渲染根组件
})
